package cc.shacocloud.redis.study.queue.delay;

import org.jetbrains.annotations.NotNull;

/**
 * 延迟消息消费者
 */
public interface DelayMessageConsumer {

    /**
     * 消费延迟消息
     *
     * @param expire 毫秒级 到期时间
     * @param data   消息体
     * @throws Exception 执行可抛出异常，会在 {@link #exceptionCaught} 处理
     */
    void consume(long expire, byte[] data) throws Exception;

    /**
     * 消费异常捕获
     *
     * @param expire 毫秒级 到期时间
     * @param data   消息体
     * @param cause  消费过程中发生例外
     * @see #consume(long, byte[])
     */
    default void exceptionCaught(long expire, byte[] data, @NotNull Throwable cause) {
        cause.printStackTrace();
    }
}
